<html>
<head><meta charset="utf-8"><title>GAT use-case analysis · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html">GAT use-case analysis</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="160134704"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160134704" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160134704">(Mar 06 2019 at 21:08)</a>:</h4>
<p><span class="user-mention" data-user-id="126931">@centril</span> you ready to chat?</p>



<a name="160134750"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160134750" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160134750">(Mar 06 2019 at 21:09)</a>:</h4>
<p>Sure; should we use hangouts? would be more effective</p>



<a name="160134820"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160134820" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160134820">(Mar 06 2019 at 21:10)</a>:</h4>
<p>hm, i was hoping we could do it here to provide a more clear log / room for other people to jump in</p>



<a name="160134845"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160134845" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160134845">(Mar 06 2019 at 21:10)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> ah; ummh.. well I was thinking a paper doc + hangouts; we link to it here so people can dump stuff</p>



<a name="160134846"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160134846" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160134846">(Mar 06 2019 at 21:10)</a>:</h4>
<p>(i will be ready in just a minute)</p>



<a name="160135012"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135012" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135012">(Mar 06 2019 at 21:13)</a>:</h4>
<p><span class="user-mention" data-user-id="126931">@centril</span> <a href="https://paper.dropbox.com/doc/GAT-use-cases--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1" target="_blank" title="https://paper.dropbox.com/doc/GAT-use-cases--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1">https://paper.dropbox.com/doc/GAT-use-cases--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1</a></p>



<a name="160135105"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135105" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135105">(Mar 06 2019 at 21:14)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> If you don't mind; I would prefer to also talk things through through voice</p>



<a name="160135110"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135110" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135110">(Mar 06 2019 at 21:14)</a>:</h4>
<p>ok</p>



<a name="160135119"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135119" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135119">(Mar 06 2019 at 21:14)</a>:</h4>
<p>lemme grab a room</p>



<a name="160135145"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135145" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135145">(Mar 06 2019 at 21:15)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span>  <a href="https://meet.google.com/hxa-pjpd-uvx" target="_blank" title="https://meet.google.com/hxa-pjpd-uvx">https://meet.google.com/hxa-pjpd-uvx</a> ?</p>



<a name="160135173"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160135173" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160135173">(Mar 06 2019 at 21:15)</a>:</h4>
<p>yep i'm there now</p>



<a name="160137335"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160137335" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160137335">(Mar 06 2019 at 21:43)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> ok, we've generated a small set of some representative examples and analysis: <a href="https://paper.dropbox.com/doc/GAT-use-case-analysis--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1" target="_blank" title="https://paper.dropbox.com/doc/GAT-use-case-analysis--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1">https://paper.dropbox.com/doc/GAT-use-case-analysis--AY1Ck74Fgk1Ztq1kHrethI8BAg-xFJQMxHXTOUekCyweukU1</a></p>



<a name="160137381"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160137381" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160137381">(Mar 06 2019 at 21:44)</a>:</h4>
<p>TLDR we can get quite a lot of benefit from lifetime/type abstraction without any bounds at all</p>



<a name="160137413"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160137413" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160137413">(Mar 06 2019 at 21:44)</a>:</h4>
<p>this is perhaps most vital for abstracting over async functions that borrow</p>



<a name="160144556"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160144556" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160144556">(Mar 06 2019 at 22:10)</a>:</h4>
<p><span class="user-mention" data-user-id="127859">@Taylor Cramer</span> i bet you have other good GAT examples to add -- particularly interested in things that are relatively "urgent" since this is partly feeding into prioritization</p>



<a name="160149379"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160149379" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160149379">(Mar 06 2019 at 23:01)</a>:</h4>
<p>ooh ooh</p>



<a name="160149385"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160149385" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160149385">(Mar 06 2019 at 23:01)</a>:</h4>
<p>so many things :)</p>



<a name="160149405"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160149405" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160149405">(Mar 06 2019 at 23:01)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> are you primarily asking about lifetime ones, or do type ones count as well?</p>



<a name="160149516"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160149516" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160149516">(Mar 06 2019 at 23:02)</a>:</h4>
<p>types are surely just as important</p>



<a name="160150101"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160150101" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160150101">(Mar 06 2019 at 23:11)</a>:</h4>
<p><span class="user-mention" data-user-id="127859">@Taylor Cramer</span> everything and anything ;) The distinction between "has bound" and not is probably more important wrt. chalk vs. rustc than types vs. lifetimes</p>



<a name="160150838"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160150838" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160150838">(Mar 06 2019 at 23:22)</a>:</h4>
<p>Ah, so you're looking for examples that have bounds?</p>



<a name="160150853"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160150853" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160150853">(Mar 06 2019 at 23:22)</a>:</h4>
<p>Bounds on the parameters of the associated type itself is very unclear to me since I've never been sure what parts of that are inferred from WF requirements</p>



<a name="160150866"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160150866" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160150866">(Mar 06 2019 at 23:23)</a>:</h4>
<p>do you mean bounds that wouldn't be included in WF requirements?</p>



<a name="160150987"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160150987" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160150987">(Mar 06 2019 at 23:24)</a>:</h4>
<p><span class="user-mention" data-user-id="127859">@Taylor Cramer</span> well use cases of GATs in general; just dump them in the doc and then we can segregate based on type/lifetime and bound-on-assoc-type/bound-on-parameters-of-assoc-type/no-bounds</p>



<a name="160151027"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151027" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151027">(Mar 06 2019 at 23:25)</a>:</h4>
<p>iirc bounds on the parameters of an associated type need to be satisfies when the associated type is used as opposed to those on an associated type itself (which are really just constraints on the trait)</p>



<a name="160151075"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151075" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151075">(Mar 06 2019 at 23:26)</a>:</h4>
<p>(the Haskell equivalent is probably clearer in this respect)</p>



<a name="160151083"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151083" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151083">(Mar 06 2019 at 23:26)</a>:</h4>
<p>for the <code>Functor</code> example, you could plausibly want <code>type Out&lt;B&gt;: Functor&lt;B&gt;;</code>, which is a nontrivial bound</p>



<a name="160151112"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151112" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151112">(Mar 06 2019 at 23:26)</a>:</h4>
<p>or are we talking bounds on the type parameter?</p>



<a name="160151120"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151120" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151120">(Mar 06 2019 at 23:26)</a>:</h4>
<p><span class="user-mention" data-user-id="121053">@varkor</span>  I think it's useful without it as well; you accept more things that maybe you shouldn't</p>



<a name="160151156"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151156" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151156">(Mar 06 2019 at 23:27)</a>:</h4>
<p><span class="user-mention" data-user-id="121053">@varkor</span> it's unclear really; Niko knows better what sort of bounds need chalk and which dont</p>



<a name="160151170"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151170" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151170">(Mar 06 2019 at 23:27)</a>:</h4>
<p>(I'm not sure I would actually enforce it in a real API, but for "generating use cases", it's a potential example)</p>



<a name="160151253"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151253" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151253">(Mar 06 2019 at 23:28)</a>:</h4>
<p><span class="user-mention" data-user-id="121053">@varkor</span>  ah; well -- use cases with emphasis on real world practicality ;)</p>



<a name="160151273"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151273" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151273">(Mar 06 2019 at 23:29)</a>:</h4>
<p>that's what I'm saying: it's a reasonable bound to have</p>



<a name="160151344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151344">(Mar 06 2019 at 23:30)</a>:</h4>
<p>oh, in my current draft of <code>Functor</code>, I <em>do</em> have this bound</p>



<a name="160151371"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151371" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151371">(Mar 06 2019 at 23:30)</a>:</h4>
<p>so I think it is a realistic example :)</p>



<a name="160151429"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151429" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151429">(Mar 06 2019 at 23:31)</a>:</h4>
<p>Right; that's probably true, but I think you can get away without it also so it might not be all we want in the end but the initial version may not require chalk</p>



<a name="160151437"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151437" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151437">(Mar 06 2019 at 23:31)</a>:</h4>
<p>(so we can maybe ship sooner)</p>



<a name="160151663"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160151663" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> varkor <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160151663">(Mar 06 2019 at 23:34)</a>:</h4>
<p>yeah, it's definitely not one that is absolutely dependent on bounds</p>



<a name="160328182"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328182" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328182">(Mar 08 2019 at 21:40)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> <span class="user-mention" data-user-id="126931">@centril</span> nice, I've not had time to look at the examples yet, I'll try to schedule some time for that on Monday.</p>



<a name="160328227"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328227" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328227">(Mar 08 2019 at 21:41)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span>  feel free to add your own <span aria-label="slight smile" class="emoji emoji-1f642" role="img" title="slight smile">:slight_smile:</span></p>



<a name="160328607"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328607" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328607">(Mar 08 2019 at 21:47)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> no worries -- fwiw i think this list could be a <em>lot</em> longer (cc <span class="user-mention" data-user-id="127859">@Taylor Cramer</span>) but i think we already have enough to answer the basic questions around what benefits we could get from the most basic form of GATs</p>



<a name="160328914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328914">(Mar 08 2019 at 21:51)</a>:</h4>
<p>Yup, I have it on my list to fill this out more</p>



<a name="160328932"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328932" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328932">(Mar 08 2019 at 21:51)</a>:</h4>
<p>Sorry I haven't had a chance to do that yet <span class="user-mention" data-user-id="116010">@Aaron Turon</span></p>



<a name="160328944"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328944" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328944">(Mar 08 2019 at 21:51)</a>:</h4>
<p><span class="user-mention" data-user-id="127859">@Taylor Cramer</span> no worries, and no rush!</p>



<a name="160328966"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160328966" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Aaron Turon <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160328966">(Mar 08 2019 at 21:51)</a>:</h4>
<p>we have what we need for now, i think, and otherwise this is just a catalog that could be helpful for answering futures design/impl questions</p>



<a name="160329298"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160329298" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160329298">(Mar 08 2019 at 21:56)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span>  and also test cases!</p>



<a name="160381001"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381001" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381001">(Mar 09 2019 at 19:49)</a>:</h4>
<p><span class="user-mention" data-user-id="126931">@centril</span> <span class="user-mention" data-user-id="116010">@Aaron Turon</span>  I believe you would need an additional bound on the <code>StreamingIterator</code> example</p>



<a name="160381064"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381064" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381064">(Mar 09 2019 at 19:50)</a>:</h4>
<p>something along the lines of:</p>
<div class="codehilite"><pre><span></span><span class="k">trait</span><span class="w"> </span><span class="n">StreamingIterator</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="k">type</span> <span class="nc">Item</span><span class="o">&lt;</span><span class="na">&#39;a</span><span class="o">&gt;</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">Self</span>: <span class="na">&#39;a</span><span class="p">;</span><span class="w"></span>

<span class="w">   </span><span class="c1">// there already is some sort of implicit `where Self: &#39;a` here because of `&amp;&#39;a mut self`</span>
<span class="w">   </span><span class="k">fn</span> <span class="nf">next</span><span class="o">&lt;</span><span class="na">&#39;a</span><span class="o">&gt;</span><span class="p">(</span><span class="o">&amp;</span><span class="na">&#39;a</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="bp">self</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="nc">Self</span>::<span class="n">Item</span><span class="o">&lt;</span><span class="na">&#39;a</span><span class="o">&gt;</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="160381078"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381078" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381078">(Mar 09 2019 at 19:51)</a>:</h4>
<p>otherwise, you cannot do:</p>
<div class="codehilite"><pre><span></span><span class="k">impl</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">StreamingIterator</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">Foo</span><span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="k">type</span> <span class="nc">Item</span><span class="o">&lt;</span><span class="na">&#39;a</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&amp;</span><span class="na">&#39;a</span><span class="w"> </span><span class="n">T</span><span class="p">;</span><span class="w"> </span><span class="c1">// error: `T` does not outlive `&#39;a`, hence `&amp;&#39;a T` is not well-formed</span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="160381126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381126">(Mar 09 2019 at 19:52)</a>:</h4>
<p>whereas with the <code>were Self: 'a</code>, it means that you can project <code>&lt;SomeType&lt;...&gt; as StreamingIterator&gt;::Item&lt;'a&gt;</code>  only if <code>SomeType&lt;...&gt;: 'a</code></p>



<a name="160381133"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381133" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381133">(Mar 09 2019 at 19:53)</a>:</h4>
<p>but on the assoc type value you can now rely on <code>Self: 'a</code>, which in my example is <code>Foo&lt;T&gt;: 'a</code> which would imply the needed <code>T: 'a</code></p>



<a name="160381184"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381184" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381184">(Mar 09 2019 at 19:54)</a>:</h4>
<p>hence this invalidates your sentence:</p>
<blockquote>
<p>Most of our examples don’t use any bounds at all; those that do tend to bound the associated type itself, not its parameter</p>
</blockquote>
<p>here, I'm bounding the <code>Self</code> parameter</p>



<a name="160381273"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381273" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381273">(Mar 09 2019 at 19:57)</a>:</h4>
<p>regarding whether chalk is needed or not, I don't think chalk is actually <em>really</em> needed, it's just that we have already modeled in chalk things like what bounds should be relied on vs what bounds you should be proving and when, and all this stuff naturally translates into logical rules which the engine can solve</p>



<a name="160381275"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381275" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthew Jasper <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381275">(Mar 09 2019 at 19:57)</a>:</h4>
<p>The functor example also has a <code>B: Sized</code> bound</p>



<a name="160381280"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381280" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381280">(Mar 09 2019 at 19:57)</a>:</h4>
<p>so you don't need to think too much about the implementation details</p>



<a name="160381346"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381346" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381346">(Mar 09 2019 at 19:58)</a>:</h4>
<p><span class="user-mention" data-user-id="116118">@Matthew Jasper</span> yes totally, although you'll have implicit <code>Sized</code> bounds on parameters as soon as you allow generic type parameters</p>



<a name="160381426"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381426" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Matthew Jasper <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381426">(Mar 09 2019 at 20:00)</a>:</h4>
<p>Well, you could require that <code>?Sized</code> is always used. But that seems unlikely to be a version that we want stabilized.</p>



<a name="160381455"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160381455" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160381455">(Mar 09 2019 at 20:01)</a>:</h4>
<p><span class="user-mention" data-user-id="126931">@centril</span> <span class="user-mention" data-user-id="116010">@Aaron Turon</span> also I believe chalk has more "first-class" support for quantification over types (although I've already added some support for that in rustc within the chalk integration work), but again it is not needed if we want to target something quickly shippable which would e.g. only have generic lifetimes</p>



<a name="160404870"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160404870" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160404870">(Mar 10 2019 at 07:38)</a>:</h4>
<p><span class="user-mention" data-user-id="116010">@Aaron Turon</span> commented on the doc -- perhaps this belongs more in the lang chat, but I realized I didn't remember discussing the syntax for specifying required GATs in bounds-- a la <code>Box&lt;dyn Iterator&lt;Item = u8&gt;&gt;</code> today, would you have <code>Box&lt;dyn for&lt;'a&gt; StreamingIterator&lt;Item&lt;'a&gt; = &amp;'a u8&gt;&gt;</code>?</p>



<a name="160405043"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160405043" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160405043">(Mar 10 2019 at 07:45)</a>:</h4>
<p>or, given the above, <code>Box&lt;dyn for&lt;'a&gt; where(Self: 'a) StreamingIterator&lt;Item&lt;'a&gt; = &amp;'a u8&gt;&gt;</code></p>



<a name="160405046"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160405046" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Taylor Cramer <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160405046">(Mar 10 2019 at 07:45)</a>:</h4>
<p>ick ick ick</p>



<a name="160409211"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409211" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409211">(Mar 10 2019 at 09:54)</a>:</h4>
<p><span class="user-mention" data-user-id="127859">@Taylor Cramer</span> I think the only way for this bound to be valid would be through <code>Box&lt;dyn for&lt;‘a&gt; StreamingIterator&lt;Item&lt;‘a&gt; = &amp;’a u8&gt; + ‘static&gt;</code></p>



<a name="160409399"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409399" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409399">(Mar 10 2019 at 10:00)</a>:</h4>
<p>But this seems restrictive, since you’re going to call <code>next()</code> only with short lifetimes</p>



<a name="160409465"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409465" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409465">(Mar 10 2019 at 10:02)</a>:</h4>
<p>I think we might be able to just not need specifying the <code>where</code> bounds so that <code>Box&lt;dyn for&lt;‘a&gt; StreamingIterator&lt;Item&lt;‘a&gt; = &amp;’a u8&gt;&gt;</code> just works (even in the presence of a <code>where Self: ‘a</code> bound in the trait decl)</p>



<a name="160409498"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409498" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409498">(Mar 10 2019 at 10:03)</a>:</h4>
<p>Proving the <code>where Self: ‘a</code> bound is only important when projecting, e.g. naming <code>(dyn for&lt;‘a&gt; StreamingIterator&lt;Item&lt;‘a&gt; = &amp;’a u8&gt;)::Item&lt;‘lifetime&gt;</code> with a concrete <code>’lifetime</code></p>



<a name="160409502"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409502" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409502">(Mar 10 2019 at 10:03)</a>:</h4>
<p>The ability to specify <code>where</code> on <code>for&lt;...&gt;</code> binders is useful tho and we should think of ways to introduce it</p>



<a name="160409546"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409546" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> scalexm <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409546">(Mar 10 2019 at 10:04)</a>:</h4>
<p><span class="user-mention" data-user-id="126931">@centril</span> that’s right but probably out of scope for an initial GATs implementation</p>



<a name="160409557"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/GAT%20use-case%20analysis/near/160409557" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> centril <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/GAT.20use-case.20analysis.html#160409557">(Mar 10 2019 at 10:04)</a>:</h4>
<p>probably</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>